/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package sisgraf.model;

import java.io.Serializable;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Temporal;

/**
 *
 * @author Jordan de Carvalho Guerra
 */
@Entity
public class Orcamento implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
        @GeneratedValue
        private Integer id;
    @Temporal(javax.persistence.TemporalType.DATE)
        private Date dataSolicitacao;
    @Temporal(javax.persistence.TemporalType.DATE)
        private Date dataEmissao;
    @Temporal(javax.persistence.TemporalType.DATE)
        private Date dataEncerramento;
    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
        private Set<ItemOrcamento> itemOrcamento;
    @ManyToOne(optional = false)
        @JoinColumn(name = "idVendedor", referencedColumnName = "id", nullable = false)
        private Vendedor vendedor;
    @ManyToOne(optional = false)
        @JoinColumn(name = "idCliente", referencedColumnName = "id", nullable = false)
        private Cliente cliente;

    public Orcamento() {
        this.id=null;
        this.dataSolicitacao=null;
        this.dataEmissao=null;
        this.dataEncerramento=null;
        this.itemOrcamento = new HashSet<ItemOrcamento>();
        this.vendedor=null;
        this.cliente=null;
    }

    public Orcamento(Integer id) {
        this.id = id;
        this.dataSolicitacao=null;
        this.dataEmissao=null;
        this.dataEncerramento=null;
        this.itemOrcamento = new HashSet<ItemOrcamento>();
        this.vendedor=null;
        this.cliente=null;
    }

    public Orcamento(Integer id, Date dataSolicitacao, Date dataEmissao) {
        this.id = id;
        this.dataSolicitacao = dataSolicitacao;
        this.dataEmissao = dataEmissao;
        this.dataEncerramento=null;
        this.itemOrcamento = new HashSet<ItemOrcamento>();
        this.vendedor=null;
        this.cliente=null;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Date getDataSolicitacao() {
        return dataSolicitacao;

    }

    public void setDataSolicitacao(Date dataSolicitacao) {
        this.dataSolicitacao = dataSolicitacao;
    }

    public void setDataSolicitacao(String dataSolicitacao) {
        SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
        java.util.Date data=null;

        try {
            data = formato.parse(dataSolicitacao);
        } catch (ParseException ex) {
            data=null;
        } finally {
            this.dataSolicitacao = data;
        }
    }

    public String getDataSolicitacaoForm() {
        String data="  /  /    ";
        if (this.dataSolicitacao!=null){
            SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
            data = formato.format(this.dataSolicitacao);
        }
        return data;
    }

    public Date getDataEmissao() {
        return dataEmissao;
    }

    public void setDataEmissao(Date dataEmissao) {
        this.dataEmissao = dataEmissao;
    }
    public void setDataEmissao(String dataEmissao) {
        SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
        java.util.Date data=null;

        try {
            data = formato.parse(dataEmissao);
        } catch (ParseException ex) {
            data=null;
        } finally {
            this.dataEmissao = data;
        }
    }

    public String getDataEmissaoForm() {
        String data="  /  /    ";
        if (this.dataEmissao!=null){
            SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
            data = formato.format(this.dataEmissao);
        }
        return data;
    }
    public Date getDataEncerramento() {
        return dataEncerramento;
    }

    public void setDataEncerramento(Date dataEncerramento) {
        this.dataEncerramento = dataEncerramento;
    }

    public void setDataEncerramento(String dataEncerramento) {
        SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
        java.util.Date data=null;

        try {
            data = formato.parse(dataEncerramento);
        } catch (ParseException ex) {
            data=null;
        } finally {
            this.dataEncerramento = data;
        }
    }

    public String getDataEncerramentoForm() {
        String data="  /  /    ";
        if (this.dataEncerramento!=null){
            SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
            data = formato.format(this.dataEncerramento);
        }
        return data;
    }
    public Set<ItemOrcamento> getItemOrcamento() {
        return itemOrcamento;
    }

    public ItemOrcamento getItemOrcamento(Integer id) {
        ItemOrcamento pesq;
        Iterator it = itemOrcamento.iterator();
	while (it.hasNext())
	{
	   pesq= (ItemOrcamento) it.next();
           if (pesq.getId().equals(id)){
               return pesq;
           }
	}

        return null;
    }

    public void setItemOrcamento(Set<ItemOrcamento> itemOrcamento) {
        this.itemOrcamento = itemOrcamento;
    }

    public void setItemOrcamento(ItemOrcamento itemOrcamento) {
        this.itemOrcamento.add(itemOrcamento);
    }

    public Vendedor getVendedor() {
        return vendedor;
    }

    public void setVendedor(Vendedor vendedor) {
        this.vendedor = vendedor;
    }

    public Cliente getCliente() {
        return cliente;
    }

    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }
    public boolean excluiItemOrcamento(Integer id) {
        ItemOrcamento pesq;
        Iterator it = itemOrcamento.iterator();
	while (it.hasNext())
	{
	   pesq= (ItemOrcamento) it.next();
           if ((pesq.getId().equals(id))){
               it.remove();
               return true;
           }
	}
        return false;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

}
